
class ConvenioController {

    String controlador;
    ConvenioService convenioService;
    PessoaService pessoaService;

    //closure que grava o registro.
    def save   = {
        if(!verificaLogon()){
            return;
        }
        controlador = params.tipo;
        
        // Instancia convenio.
        def convenioInstance = new Convenio(params);
        // Verifica se já tem convênio ativo.
        Colaborador colaboradorInstance = Colaborador.findById(params.colaborador.id);
        if (!convenioService.possuiConvenioAtivo(colaboradorInstance)) {
            // grava o convênio.
            if (convenioInstance.save(flush: true)) {
                flash.message = "Convênio cadastrado com sucesso.";
                redirect(controller: controlador, action: "edit", id:params.colaborador.id);
            }else {
                flash.message = "Não foi possível cadastrar o convênio.";
                redirect(controller: controlador, action: "edit", id:params.colaborador.id, model: [convenioInstance: convenioInstance]);
            }
        }else{
            flash.message = "Já existe um convênio ativo.";
            redirect(controller:controlador, action:'edit', id:params.colaborador.id);
        }
    };

    /*
     * Closure que grava a alteração nos convênios.
     * Um convênio só pode ser alterado se estiver ativo, caso esteja inativo ou recindido não é permitida a alteração.
     */
    def update   = {
        if(!verificaLogon()){
            return;
        }
        controlador = params.tipo;
        
        // Instancia convenio.
        def convenioInstance = Convenio.get(params.id);
        // Verifica se está inativo.
        if (convenioService.convenioEstaInativo(convenioInstance)) {
            // Verifica se esta recindido.
            if(convenioService.convenioEstaRecindido(convenioInstance)){
                convenioInstance.properties = params;
                if (convenioInstance.save(flush: true)) {
                    flash.message = "Convênio alterado com sucesso.";
                    redirect(controller: controlador, action: 'edit', id:params.colaborador.id);
                }else {
                    flash.message = "Não foi possível alterar o convênio.";
                    redirect(controller: controlador, action: "edit", model: [convenioInstance: convenioInstance]);
                }
            }else{
                flash.message = "Convênio recindido não pode ser alterado.";
                redirect(controller: controlador, action: 'edit', id:params.colaborador.id);
            }
        }else{
            flash.message = "Convênio inativo não pode ser alterado.";
            redirect(controller: controlador, action: 'edit', id:params.colaborador.id);
        }
    };


    //closure que carrega a tela de edição de cadastro
    def edit   = {
        if(!verificaLogon()){
            return;
        }

        //carrego os endereços cadastrados
        def convenioInstance     = Convenio.findById(params.id);
        //se o estagiário existe retorna os dados
        if (convenioInstance){
            redirect(controller: 'pessoa', action: 'edit', id:params.colaborador, params:[convenio: convenioInstance]);
        }else {
            flash.message = "Convênio não encontrado.";
            redirect(controller: 'pessoa', view: 'edit');
        }
    };



    //closure que exclui os registros
    def delete = {
        if(!verificaLogon()){
            return;
        }

        controlador = params.tipo;

        //carrega os atributos do registro a partir do ID
        def convenioInstance = Convenio.findById(params.id)
        //exclui o registro
        convenioInstance.delete();
        flash.message = "Convênio excluido com sucesso.";
        redirect(controller: controlador, action: "edit", id:params.colaborador);
    };


    /*
     * Método que verifica se o usuário está logado.
     * Se não estiver logado é redirecionado para home
     */
    private boolean verificaLogon() {
        if(!session["pessoa"]){
            flash.message = "Você precisa estar logado para acessar esta página.";
            redirect(controller:'login', action:'auth');
            return false;
        }

        return true;
    }

}
